import axios from 'axios'
import { ElMessage } from 'element-plus'

// 从环境变量获取配置
const baseURL = import.meta.env.VITE_API_BASE_URL
const apiPrefix = import.meta.env.VITE_API_PREFIX

// 创建axios实例
const service = axios.create({
  baseURL: baseURL, // 设置基础URL
  timeout: 10000, // 请求超时时间
})

// 请求拦截器
service.interceptors.request.use(
  config => {
    // 可以在这里设置统一的headers，如token等
    // config.headers['Authorization'] = 'Bearer ' + getToken()
    return config
  },
  error => {
    console.error('请求错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
service.interceptors.response.use(
  response => {
    const res = response.data
    return res
  },
  error => {
    // 处理错误响应
    console.error('请求错误:', error)
    
    // 获取错误信息
    const errorMessage = error.response?.data?.message || error.message || '请求失败'
    
    // 显示错误消息
    ElMessage.error(errorMessage)
    
    return Promise.reject(error)
  }
)

/**
 * 处理URL，根据useRootPath参数决定是否添加API前缀
 * @param {string} url - 原始URL
 * @param {boolean} useRootPath - 是否使用API前缀
 * @returns {string} - 处理后的URL
 */
const processUrl = (url, useRootPath) => {
  // 如果apiPrefix为空或不使用前缀，则直接使用原始URL
  if (!apiPrefix || !useRootPath || url.startsWith(apiPrefix)) {
    return url.startsWith('/') ? url : `/${url}`
  }
  
  // 添加API前缀
  return `${apiPrefix}${url.startsWith('/') ? url : `/${url}`}`
}

/**
 * 封装GET请求
 * @param {string} url - 请求URL
 * @param {Object} params - 请求参数
 * @param {boolean} useRootPath - 是否使用API前缀，默认true
 * @returns {Promise} - 响应Promise
 */
const get = (url, params = {}, useRootPath = true) => {
  // 处理URL前缀
  const processedUrl = processUrl(url, useRootPath)
  
  return service({
    url: processedUrl,
    method: 'get',
    params
  })
}

/**
 * 封装POST请求
 * @param {string} url - 请求URL
 * @param {Object} data - 请求体数据
 * @param {boolean} useRootPath - 是否使用API前缀，默认true
 * @returns {Promise} - 响应Promise
 */
const post = (url, data = {}, useRootPath = true) => {
  // 处理URL前缀
  const processedUrl = processUrl(url, useRootPath)
  
  return service({
    url: processedUrl,
    method: 'post',
    data
  })
}

/**
 * 封装PUT请求
 * @param {string} url - 请求URL
 * @param {Object} data - 请求体数据
 * @param {boolean} useRootPath - 是否使用API前缀，默认true
 * @returns {Promise} - 响应Promise
 */
const put = (url, data = {}, useRootPath = true) => {
  // 处理URL前缀
  const processedUrl = processUrl(url, useRootPath)
  
  return service({
    url: processedUrl,
    method: 'put',
    data
  })
}

/**
 * 封装DELETE请求
 * @param {string} url - 请求URL
 * @param {Object} params - 请求参数
 * @param {boolean} useRootPath - 是否使用API前缀，默认true
 * @returns {Promise} - 响应Promise
 */
const del = (url, params = {}, useRootPath = true) => {
  // 处理URL前缀
  const processedUrl = processUrl(url, useRootPath)
  
  return service({
    url: processedUrl,
    method: 'delete',
    params
  })
}

// 导出请求方法
export {
  get,
  post,
  put,
  del
}

// 导出axios实例
export default service 